﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Linq;

namespace PrimeraAFantasyFootballl.Models
{
    public partial class Jugador : IComparable<Jugador>

     {

        public Jugador(int id, string nombre, string club, int posicion)
        {
            this.JugadorID = id;
            this.Nombre = nombre;
            this.Club = club;
            this.Posicion = posicion;
                   
        }

        public bool IsValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (String.IsNullOrEmpty(Nombre))
                yield return new RuleViolation("Se requiere un Nombre valido", "Nombre");
            if (String.IsNullOrEmpty(Club))
                yield return new RuleViolation("Se requiere un Club valido", "Club");
            if (String.IsNullOrEmpty(Posicion.ToString()))
                yield return new RuleViolation("Se requiere una posicion valida", "Posicion");
     
           
            yield break;
        }
       /*/ partial void OnValidate(ChangeAction action)
        {
            if (!IsValid)
                throw new ApplicationException("Rule violations prevent saving");
        }/*/



        public int CompareTo(Jugador y)
        {
            Jugador x = this;
            bool xmalo = (x == null || x.Posicion < 1);
            bool ymalo = y == null || y.Posicion < 1;

            if (xmalo && ymalo) return 0;
            else if (xmalo && !ymalo) return 1;
            else if (!xmalo && ymalo) return -1;
            else { 
                int res = x.Posicion.CompareTo(y.Posicion);
                if (res == 0) return x._Club.CompareTo(y.Club);
                else return res;
            }


        }




    }
    public class RuleViolation
    {
        public string ErrorMessage { get; private set; }
        public string PropertyName { get; private set; }
        public RuleViolation(string errorMessage)
        {
            ErrorMessage = errorMessage;
        }
        public RuleViolation(string errorMessage, string propertyName)
        {
            ErrorMessage = errorMessage;
            PropertyName = propertyName;
        }


  


        


    }
}
